﻿using DAL;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BEL
{
    public class Usuario
    {
        #region atributos
        private int _usuarioId;
        private Roles _rol;
        private String _usuarioPassword;
        private String _usuarioNombre;
        public enum Roles { UsuarioFinal, UsuarioComercio, Admin }

        #endregion

        #region properties
        public Roles Rol
        {
            get { return _rol; }
            set { _rol = value; }
        }

        public String UsuarioNombre
        {
            get { return _usuarioNombre; }
            set { _usuarioNombre = value; }
        }

        public String UsuarioPassword
        {
            get { return _usuarioPassword; }
            set { _usuarioPassword = value; }
        }


        public int UsuarioId
        {
            get { return _usuarioId; }
            set { _usuarioId = value; }
        }
        #endregion
        #region constructores

        public Usuario(int usuarioId, Roles rol, String usuarioPassword, String usuarioNombre)
        {
            _usuarioId = usuarioId;
            _rol = rol;
            _usuarioPassword = usuarioPassword;
            _usuarioNombre = usuarioNombre;

        }

        public Usuario()
        {

        }

        public Usuario(String usuarioNombre, String usuarioPassword, Roles rol)
        {
            _usuarioPassword = usuarioPassword;
            _usuarioNombre = usuarioNombre;
            _rol = rol;

        }

        #endregion
        #region funciones

        public Usuario AltaUsuario(String usuNombre, String usuPassword, Roles rol)
        {
            this.UsuarioNombre = usuNombre;
            this.UsuarioPassword = usuPassword;
            this.Rol = rol;

            if ((DALUsuarios.AltaUsuario(this.toHashtable())) > 0)
            {
                return this;
            }
            else
            {
                return null;
            }
        }

        public Boolean ModificarUsuario(int usuId, string usuNombre, string usuPassword)
        {
            return false;
        }

        public Boolean AsignarRol(int usuId, int rolId)
        {
            return false;
        }

        public List<Usuario> BuscarUsuarios()
        {
            return null;
        }

        public static Usuario BuscarUsuario(String usuNom)
        {
            DALUsuarios dalusuario = new DALUsuarios();
            SqlDataReader dr = dalusuario.BuscarUsuario(usuNom);
            Usuario usu = null;
            while (dr.Read())
            {
                usu = new Usuario();
                usu.UsuarioId = (int)dr["UsuId"];
                usu.UsuarioNombre = (String)dr["UsuNombre"];
                usu.UsuarioPassword = (String)dr["UsuPassword"];
            }
            dr.Close();
            return usu;
        }
        public static Usuario BuscarUsuario(int usuId)
        {
            DALUsuarios dalusuario = new DALUsuarios();
            SqlDataReader dr = dalusuario.BuscarUsuario(usuId);
            Usuario usu = null;
            while (dr.Read())
            {
                usu = new Usuario();
                usu.UsuarioId = (int)dr["UsuId"];
                usu.UsuarioNombre = (String)dr["UsuNombre"];
                usu.UsuarioPassword = (String)dr["UsuPassword"];
            }
            dr.Close();
            return usu;
        }
        public Boolean ValidarUsuario()
        {
            return false;
        }

        public static Usuario Login(String user, String pass)
        {

            DALUsuarios dal = new DALUsuarios();
            SqlDataReader dr = dal.BuscarLogin(user, pass);
            Usuario usu = null;
            while (dr.Read())
            {
                usu = new Usuario();
                usu.UsuarioId = (int)dr["UsuId"];
                usu.UsuarioNombre = (String)dr["UsuNombre"];
                usu.UsuarioPassword = (String)dr["UsuPassword"];
                usu._rol = Usuario.rolDeString(Convert.ToString(dr["Rol"]));
            }
            dr.Close();
            return usu;
        }

       public Hashtable toHashtable()
        {
            Hashtable hash = new Hashtable();

            if (!string.IsNullOrEmpty(UsuarioId.ToString()))
            {
                hash.Add("UsuarioId", this.UsuarioId);
            }
            hash.Add("UsuarioNombre", this.UsuarioNombre);
            hash.Add("UsuarioPassword", this.UsuarioPassword);
            hash.Add("Rol", this.Rol.ToString());
            return hash;

        }
        /*public void fromHashtable(Hashtable ht)
        {

            this.UsuarioId = Convert.ToInt32(ht["UsuarioId"].ToString());
            this.UsuarioNombre = ht["UsuarioNombre"].ToString();
            this.UsuarioPassword = ht["UsuarioPassword"].ToString();
            this.Rol = Usuario.rolDeString(ht["Rol"].ToString());

        }*/

        public static Roles rolDeString(String rol)
        {
            if (rol.Equals("UsuarioFinal"))
            {
                return Roles.UsuarioFinal;
            }
            else if (rol.Equals("UsuarioComercio"))
            {
                return Roles.UsuarioComercio;
            }
            else
            {
                return Roles.Admin;
            }
        }
        #endregion
    }
}
